#define _CRT_SECURE_NO_WARNINGS 1
#include <unordered_map>
#include <vector>
#include <stack>
using namespace std;
class Solution {
public:
    vector<int> solve(vector<int>& a)
    {
        // for(auto b:a) cerr<<b<<" ";
        // cerr<<endl;
        int n = a.size();
        vector<int> hash(n + 1, 1);
        stack<int> st;
        vector<int> ret;
        int cnt = 0;
        while (cnt < a.size() || !st.empty())
        {
            if (st.empty())
            {
                st.push(a[cnt]);
                hash[st.top()] = 0;
                //cerr<<"empty,stpush: "<<st.top()<<endl;
                ++cnt;
            }
            //while(!st.empty())
            else
            {
                //cerr<<"top="<<st.top()<<endl;
                int i = 0;
                for (i = st.top() + 1;i < hash.size();i++)
                {
                    if (hash[i] == 1)
                    {
                        break;
                    }
                }

                if (i >= hash.size())
                {
                    //cerr<<"stpop: "<<st.top()<<endl;
                    ret.push_back(st.top());
                    st.pop();
                }
                else
                {
                    st.push(a[cnt]);
                    hash[st.top()] = 0;
                    //cerr<<"stpush: "<<st.top()<<endl;
                    ++cnt;
                }
            }
        }
        // while(!st.empty())
        // {
        //     ret.push_back(st.top());
        //     st.pop();
        // }
        // for(auto b:ret) cerr<<b<<" ";
        // cerr<<endl;
        return ret;
    }
};